In the field of neural networks (NNs), a variety of models and frameworks, are undergoing rapid and ongoing evolution. Such developments have led to the execution (training, testing, and inference) of NNs on different computational hardware. NNs are currently being developed on a variety of frameworks. A software framework can be thought of as a software environment (e.g., set of libraries, Application Programming Interfaces (APIs), and applications) that provides particular functionality as part of a larger software platform to facilitate development of software applications, products, and solutions, Software frameworks may include support programs, compilers, code libraries, tool sets, and application programming interfaces (APIs) that bring together all the different components to enable development of a project or system. A variety of different NN frameworks are commercially available and an appropriate framework may be selected based on the type of NN model (e.g., deep stacking, deep belief, convolutional, etc.) that may be implemented.
Concurrently with changes and availability of new software frameworks, multiple different hardware platforms that may be utilized, or even specialized, for running NN models are emerging to support the requirements of NN applications. These hardware platforms may be configured to take into account specifics of an NN's development and deployment. However, the current state of the widely used NN tools and frameworks do not appear to provide any intelligent mechanism to account for various computational requirements of NNs. Further, current NN tools may fail to perform comprehensive optimizations for the multitude of available platforms, frameworks, and hardware. As a result, there may be inefficiency in that any optimization designed for a first platform will likely not be applicable on a second platform. In short, optimizations across different execution environments may require different techniques. This is, in part, because an optimization technique for a first execution environment may be incompatible (or non-optimal) for a second execution environment due to differences in hardware and other factors.